﻿using System.Collections.Generic;
using ClickLand.CorporacionPlaza.Presentacion.Contratos.AdministracionPoliza;
using ClickLand.CorporacionPlaza.Presentacion.Controladores;
using ClickLand.CorporacionPlaza.Presentacion.CorporacionPlazaWS;

namespace ClickLand.CorporacionPlaza.Presentacion.Presentadores.AdministracionPoliza
{
    /// <summary> Clase que hace de presentador para la vista que se encarga de agregar poliza </summary>
    public class PresentadorAgregarPoliza : PresentadorBase
    {

        #region Atributos
        
        /// <summary> Objeto con la propiedades de la vista </summary>
        private readonly IAgregarPoliza _vista;


        /// <summary> Objeto con la definicion del controlador del modulo </summary>
        private readonly ControladorAdministracionContrato _controlador;
        
        #endregion

        #region Constructor

        /// <summary> Constructor de la clase </summary>
        /// <param name="vista">objeto con la propiedades de la vista</param>
        public PresentadorAgregarPoliza(IAgregarPoliza vista)
        {
            _vista = vista;
            _controlador = new ControladorAdministracionContrato();
        }

        #endregion

        #region Metodos

        /// <summary> Metodo que realiza las operaciones para la inicializacion de la vista </summary>
        public void CargarPagina()
        {
            var contrato = new ContratoDto { Estado = 1 };
            _vista.ListaContratos = _controlador.BuscarContrato(contrato);
        }


        /// <summary> Metodo que realiza las operaciones para mostrar la confirmacion de la operacion </summary>
        public void MostrarConfirmacion()
        {
            var contrato = _vista.ContratoSeleccionado;
            _vista.NombreClienteConfirmacion = contrato.Cliente.Nombre;
            _vista.NombreComercialConfirmacion = contrato.NombreComercial;
            _vista.FechaInicioConfirmacion = contrato.FechaInicio.GetValueOrDefault().ToString("dd/MM/yyyy");
            _vista.FechaFinConfirmacion = contrato.FechaFin.ToString("dd/MM/yyyy");
            var lista = new List<PolizaDto>(contrato.Polizas);
            lista.Add(ObtenerPolizaIngresada());
            _vista.PolizaConfirmacion = lista;
        }


        /// <summary> Metodo que arma el objeto poliza </summary>
        /// <returns></returns>
        private PolizaDto ObtenerPolizaIngresada()
        {
            var poliza = new PolizaDto();
            poliza.FechaEmision = _vista.FechaEmisionPoliza;
            poliza.FechaFin = _vista.FechaEmisionPoliza.AddYears(1);
            poliza.Aseguradora = _vista.EmpresaAsegurador;
            poliza.Beneficiario = _vista.NombreBeneficiarioPoliza;
            poliza.Monto = _vista.MontoPoliza;
            poliza.Estado = 1;
            return poliza;
        }


        /// <summary> Metodo que realiza las operaciones para la insercion de la nueva poliza </summary>
        public bool AgregarPoliza()
        {
            var contrato = _vista.ContratoSeleccionado;
            var lista = new List<PolizaDto>(contrato.Polizas);
            lista.Add(ObtenerPolizaIngresada());
            contrato.Polizas = lista.ToArray();
            contrato.Garantia = new GarantiaDto {Id = 1};
            return _controlador.AgregarContrato(contrato);
        }

        #endregion
    }
}
